




function Get(ele) {
    // 如果已经是标签了
    if(typeof ele === 'object') {
        // 不需要获取
        this.eles = [ele] ;
    }
    else {
        this.eles = document.querySelectorAll(ele) ;
    }
    

}

// 参数有两个  prop  value    设置一个样式
// 参数只有一个
//     参数是字符串   prop   获取样式
//     参数是对象    设置多个样式
Get.prototype.css = function() {
    if(arguments.length === 2) {    // 设置样式
        for(let i = 0 ; i < this.eles.length ; i++) {
            this.eles[i].style[arguments[0]] = arguments[1] ;
        }
    }
    else if(arguments.length === 1) {
        // 判断参数是字符串
        if(typeof arguments[0] === 'string') {
            return getComputedStyle(this.eles[0])[arguments[0]]
        }
        if(typeof arguments[0] === 'object') {
            const obj = arguments[0]
            for(let i = 0 ; i < this.eles.length ; i++) {
                for(let k in obj) {
                    this.eles[i].style[k] = obj[k]
                }
            }
        }
    }
    return this 
}


Get.prototype.click = function(cb) {
    for(let i = 0 ; i < this.eles.length ; i++) {
        this.eles[i].onclick = cb
    }
    return this
}


// 显示元素  show
Get.prototype.show = function() {
    for(let i = 0 ; i < this.eles.length ; i++) {
        this.eles[i].style.display = 'block'
    }
    return this
}


// 隐藏元素  hide
Get.prototype.hide = function() {
    for(let i = 0 ; i < this.eles.length ; i++) {
        this.eles[i].style.display = 'none'
    }
    return this
}


Get.prototype.toggle = function() {
    for(let i = 0 ; i < this.eles.length ; i++) {
        // 判断是否是显示的
        if(getComputedStyle(this.eles[i]).display === 'none') {
            this.eles[i].style.display = 'block'
        } else {
            this.eles[i].style.display = 'none'
        }
    }
    return this
}



Get.prototype.parent = function() {
    // return this.eles[0].parentElement ;
    // 元素eles变成了父元素  this.eles = parentELement
    // eles原本是伪数组   改变了eles的值以后   依然都是数组

    this.eles = [this.eles[0].parentElement] ;
    return this

}


Get.prototype.prev = function() {
    this.eles = [this.eles[0].previousElementSibling] ;
    return this
}

Get.prototype.next = function() {
    this.eles = [this.eles[0].nextElementSibling] ;
    return this
}


// 兄弟们
Get.prototype.siblings = function() {
    // 找爹，孩子(排除自己 -> 第一个)
    const children = this.eles[0].parentElement.children ;      
    // 排除自己    this.eles[0]
    let arr = [] ;
    for(let i = 0 ; i < children.length ; i++) {
        if(children[i] !== this.eles[0]) {
            arr.push(children[i])
        }
    }
    this.eles = arr ;
    return this
}


// index() --- 得到元素的下标  --- 相对于同级元素的下标
Get.prototype.index = function() {
    // 找爹，孩子
    const children = this.eles[0].parentElement.children ; 
    // 自己是第几个     [p , span , h3 , span]
    // for(let i = 0 ; i < children.length ; i++) {
    //     if(children[i] === this.eles[0]) {
    //         return i 
    //     }
    // }

    return [...children].indexOf(this.eles[0])
    // index返回是一个数字  --- 后面不再有链式操作
}


Get.prototype.eq = function(i) {      
    this.eles = [this.eles[i]] ;
    return this
}



// 
Get.prototype.addClass = function(name) {
    for(let i = 0 ; i < this.eles.length ; i++) {
        this.eles[i].classList.add(name)
    }
    return this
}

Get.prototype.removeClass = function(name) {
    for(let i = 0 ; i < this.eles.length ; i++) {
        this.eles[i].classList.remove(name)
    }
    return this
}


// toggleClass 


// hasClass  判断有没有这个类名


// attr   







const $ = jQuery = function(ele) {
    return new Get(ele)
}


// $本身是一个函数  --- 函数也是一种对象

// $.aa = '美元'

// 返回了一个值
$.no = function() {
    // return function(ele) {
    //     return new Get(ele)
    // }

    return $
}


// const qq = $.no() ;

// qq('p')
